from exts import db

class User(db.Model):
    __tablename__ = "user"
    # primary_key 主键，autoincrement 自动增长
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(200),nullable=False)
    #password = db.Column(db.String(200),nullable=False)

class UserExtension(db.Model):
    __tablename__ = "user_extension"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    school = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey("user.id"))

    """
    父表：被引用方的表
    子表：引用父表的表（表中有父表的字段，一般是父表id，并且定义relationship）

    正向查询：在子表中，查询父表的信息
    反向查询：通过父表，查询子表的信息
    """
    #db.backref
    #1.在反向引用时候，需要传递一些其他参数，那么需要用到这个函数，否则不需要使用，只要在relationship的backref参数上，设置反向引用的名称就可以。
    #2.uselist=False,代表反向引用的时候，不是一个列表，而是一个对象（一对一）。
    user = db.relationship("User",backref=db.backref("extension",uselist=False))

#orm可以看作是一个类
class Article(db.Model):
    __tablename__ = "article"
    #primary_key 主键，autoincrement 自动增长
    id = db.Column(db.Integer, primary_key=True,autoincrement=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)

    #外键：
    #1.外键的数据类型一定要看所引用的字段的数据类形
    #2.db.ForeignKey("表名.字段名")
    #3.外键是属于数据库层面，不推荐在orm中使用
    author_id = db.Column(db.Integer,db.ForeignKey("user.id"))

    #relationship:
    #1.第一个参数是模型的名字，必须要和模型的名字保持一致
    #2.backref（back reference）代表反向引用 ，代表对方访问我的时候字段的名称
    author = db.relationship("User",backref="articles")

#orm版本管理没有学，现在只能删除所有表，在创建
# db.drop_all()
# db.create_all()
###########################################